class Sub{
  //事件池
   pond={}
   on(tag,fn){//添加方法
      //如果事件池中不含有这个类型，就将这个给类型变成空数组，准备存放方法
      if(!this.pond.hasOwnProperty(tag)){
        this.pond[tag]=[]
      }
      //如果这个类里面已经含有了该方法，就不存放了
      if(this.pond[tag].includes(fn)){return}
      this.pond[tag].push(fn);
      console.log(this.pond);
   }
   emit(tag,...params){//执行方法
      let arr=this.pond[tag]||[];//取出这个类型的值
      if(arr.length==0){return}//如果是空的，不循环
      let i,item;
      for(i=0;i<arr.length;i++){//循环每一项
          item=arr[i];
          if(typeof item==="function"){//如果是函数就执行
              item(...params);
          }
      }
   }
   off(tag,fn){//移除方法
        let arr=this.pond[tag]||[];//取出这个类型的值
        if(arr.length==0){return}//如果是空的，不循环
        let i,item;
        for(i=0;i<arr.length;i++){//循环每一项
          item=arr[i];
          if(item==fn){
             this.pond[tag][i]=null;
          }
      }
   }
}

//导出Sub的实例
export default new Sub()